package com.flower.common.utils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

import java.util.List;
import java.util.Map;

/**
 * The type Gson util.
 *
 * @author shanks
 * @since 2019 -09-23  14:18
 */
public class GsonUtil {

    private static Gson gson = null;

    static {
        gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
    }

    private GsonUtil() {
    }

    /**
     * 将对象转成json格式
     *
     * @param object 对象
     * @return String string
     */
    public static String toJsonString(Object object) {
        return gson.toJson(object);
    }

    /**
     * 将json转成特定的cls的对象
     *
     * @param <T>   the type parameter
     * @param text  请求参数
     * @param clazz 转换对象
     * @return 对象 t
     */
    public static <T> T jsonToBean(String text, Class<T> clazz) {
        return gson.fromJson(text, clazz);
    }

    /**
     * json字符串转成list
     *
     * @param <T>  the type parameter
     * @param text 请求参数
     * @return List对象 list
     */
    public static <T> List<T> jsonToList(String text) {
        return gson.fromJson(text, new TypeToken<List<T>>() {
        }.getType());
    }

    /**
     * json字符串转成list中有map的
     *
     * @param <T>  the type parameter
     * @param text 请求参数
     * @return List对象 list
     */
    public static <T> List<Map<String, T>> jsonToListMaps(String text) {
        return gson.fromJson(text, new TypeToken<List<Map<String, T>>>() {
        }.getType());
    }

    /**
     * json字符串转成map的
     *
     * @param <T>  对象
     * @param text 参数
     * @return 结果 map
     */
    public static <T> Map<String, T> jsonToMaps(String text) {
        return gson.fromJson(text, new TypeToken<Map<String, T>>() {
        }.getType());
    }
}
